// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the APIHOOK_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// APIHOOK_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef APIHOOK_EXPORTS
#define APIHOOK_API __declspec(dllexport)
#else
#define APIHOOK_API __declspec(dllimport)
#endif

#include "PublicDefine.h"

// This class is exported from the APIHook.dll
class APIHOOK_API CAPIHook {
private:
	static BOOL BeginRedirect(FunAddrData fd);
	static BOOL CheckIsHooked(FunNameID funName);
public:
	static int GetInjectedDllNum(void);
	static int GetLoadedDllNum(void);
	static DWORD SetThisProcessFireWall(HWND hwnd);
	static BOOL HookFun(FunNameID funName,BOOL isForceHook=FALSE);
	static BOOL HookAllFun(BOOL isForceHook=FALSE);
	static BOOL UnHookFun(FunNameID funName,BOOL isForceUnHook=FALSE);

public:
	//NET CONTROL
	static BOOL IsNetBlocked();
	static void BlockNet(BOOL isBlock);

};